#include <boost/test/unit_test.hpp>
#include "../include/math_operations.h"

// 定义一个名为MathOperationsTests的测试套件
// BOOST_AUTO_TEST_SUITE宏之后定义的所有测试用例都将属于这个测试套件
BOOST_AUTO_TEST_SUITE(MathOperationsTests)

// 定义一个名为test_subtract的测试用例
// 测试用例是具体的测试函数，在内部进行实际的单元测试
BOOST_AUTO_TEST_CASE(test_subtract)
{
    BOOST_CHECK_EQUAL(subtract(5, 3), 2);                     // 检查是否相等
    BOOST_CHECK_THROW(subtract(2, 3), std::invalid_argument); // 检查是否会抛出异常
    BOOST_WARN(subtract(5, 2) == 2);                          // 这是一个警告示例，只会检查，即使失败了也不会被当成failure
    BOOST_REQUIRE(subtract(3, 3) == 1);                       // 检查是否相等，这个是强制断言，如果失败，终止当前CASE的执行（但会继续执行后续的CASE）
    BOOST_CHECK_EQUAL(subtract(5, 3), 2);
    BOOST_CHECK_EQUAL(subtract(5, 3), 2);
}

BOOST_AUTO_TEST_CASE(test_add)
{
    BOOST_CHECK_EQUAL(add(2, 3), 5);
    BOOST_CHECK_EQUAL(add(-1, 1), 0);
    BOOST_CHECK_EQUAL(add(-1, -1), -2);
}

BOOST_AUTO_TEST_SUITE_END() // 结束当前测试套件
